// posController(pos控制器)
const posModel = require('../model/posModel')
const path = require('path')
const fs = require('fs')

const uploadImage = req => {
  if (req.file) {  //代表上传图片了
    let dot = req.file.originalname.lastIndexOf('.')
    let fileSuffix = req.file.originalname.substr(dot)  //截取上传图片的后缀名'.jpg'
    let up = path.resolve(__dirname, '../public/upload')  //获取到upload 文件夹磁盘路径
    let prevFilePath = path.resolve(up, req.file.filename)  //上传的文件路径
    let nextFilePath = path.resolve(up, req.file.filename + fileSuffix)   //修改后的文件路径
    fs.renameSync(prevFilePath, nextFilePath);  // 文件改名操作

    //需要在req.body上面添加companyLogo,入库了
    req.body.companyLogo = req.file.filename + fileSuffix
    //我们在请求体之中加上这个字段,这样直接就会假如数据库之中
  } else {
    // 用户不修改图片  没有上传图片
    req.body.companyLogo = req.body.prevCompanyLogo
  }
}

const add = async (req,res) => {
  uploadImage(req)
  // 面试题 在后端设置cors可以解决跨域问题 解决跨域问题字段Access-Control-Allow_Origin
  // res.header('Access-Control-Allow-Origin','http://localhost:8080')

  //获取到了处于pending(等待)状态的promise对象,意味着现在知道正在做数据库插入的操作
  //promise的三种状态 pending等待(阻塞)状态   resole成功 reject失败
  //方法里面 如何获取一个promise对象的resolve还是reject的结果呢?
  //我们可以借助es6的async与await来获取 await就是等待的意思,等待数据获取完毕,之后进行插入操作;await函数只能用在异步函数async之中
  let flag = await posModel.save(req.body)//这样就可以直接传post请求参数,用req.body//因为传来的数据源posModel里是异步,所以在这里要用异步等待!
  //save是添加职位信息
  //拿到posModel返回的结果
  console.log('req.body=====>', req.file, req.body);
  //req.file:拿到了上传图片的对象
  //req.body:utf-8的表单数据
  console.log('flag=======>', flag);
  res.send('进入了add方法...给前端返回数据')
  //如果成功了,我们可以给前端返回一些内容
  if (flag) {
    // res.send({flag:true,data:{message:'success'}})//如果数据库插入成功,给前端返回成功
    res.render('api.succ.ejs', {
      data: JSON.stringify({ message: 'success' })
      //数据一般是由后端定义的接口规范;(一参为管理文件的地址,二参是管理文件的)
    })
  } else {
    // res.send({flag:false,data:{massage:'fail'}})//如果数据库插入失败,给前端返回失败
    res.render('api.fail.ejs', {
      data: JSON.stringify({ message: 'fail' })
    })
  }
}

const find = async (req, res) => {
  //需要根据传递来的id查询具体职位
  const data = await posModel.find()
  //用posModel的find方法查询到数据库信息
  res.render('api.succ.ejs', {
    data: JSON.stringify(data)
  })
  //渲染查询之后的结果
}

//根据传递来的id查询具体职位
const findById = async function (req, res) {
  const data = await posModel.findById(req.params.id)
  res.render('api.succ.ejs', {
    data: JSON.stringify(data)
  })
}

const update = async function (req, res) {
  //req.body拿到修改内容
  const flag = await posModel.update(req.body.id, req.body)
  if (flag) {
    res.render('api.succ.ejs', {
      data: JSON.stringify({ message: 'success' })

    })
  } else {
    res.render('api.fail.ejs', {
      data: JSON.stringify({ message: 'fail' })
    })
  }
}
module.exports = {
  add, find, findById, update
}